package com.syg.servlet03;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
 * 可以用如下的方式来记忆"/"：
 *          如果"/"是给服务器用的，则代表当前的web工程，如果"/"是给浏览器用的，则代表webapps(Tomcat里面)目录。
 * 在Servlet中实现请求转发的两种方式：
 *          1,request.getRequestDispatcher("/test.jsp").forward(request, response);
 *          2,this.getServletContext().getRequestDispatcher("/test.jsp").forward(request, response);
 */
@WebServlet("/projectPath")
public class _03_Project_Path extends HttpServlet{
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //"/"代表当前web工程的常见应用场景
        /**
         * 1.ServletContext.getRealPath("/Images/许可证.png")是用来获取服务器上的某个资源，
         * 那么这个"/"就是给服务器用的，"/"此时代表的就是web工程
         * ServletContext.getRealPath("/Images/许可证.png")表示的就是读取web工程下的download文件夹中的1.JPG这个资源
         * 只要明白了"/"代表的具体含义，就可以很快写出要访问的web资源的绝对路径
         */
        this.getServletContext().getRealPath("/Images/许可证.png");
        System.out.println(this.getServletContext().getRealPath("/Images/许可证.png"));

        /**
         * 2.在服务器端forward到其他页面
         * 客户端请求某个web资源，服务器跳转到另外一个web资源，这个forward也是给服务器用的，
         * 那么这个"/"就是给服务器用的，所以此时"/"代表的就是web工程
         *
         * resp.sendRedirect(req.getContextPath()+"/index.jsp"):重定向为什么要加上项目路径呢?因为重定向发生在客户端,"/"就代表webapps(Tomcat里面)目录
         */
        this.getServletContext().getRequestDispatcher("/WEB-INF/JspPage/servlet03/_03_Project_Path.jsp").forward(req, resp);

        /**
         * jsp就是一个servlet,是在服务端的,所以使用include指令时,"/":代表当前的web工程
         *
         * <jsp:include page="/jspfragments/demo.jsp" />
         *
         * <%@include file="/jspfragments/head.jspf" %>
         */

        req.getServerName();  //   服务器名字
        req.getRequestURL();  //   http://localhost:8082/JavaServlet/projectPath
        req.getRequestURI();  //   /JavaServlet/projectPath
        req.getContextPath(); //   /JavaServlet
        req.getServletPath(); //   /projectPath
        System.out.println("1、"+req.getRequestURL());
        System.out.println("2、"+req.getRequestURI());
        System.out.println("3、"+req.getContextPath());
        System.out.println("4、"+req.getServletPath());
    }
}
